int err;
if( (info->connected == BLKIF_STATE_CONNECTED) ||
- (info->connected == BLKIF_STATE_SUSPENDED) )
+ (info->connected == BLKIF_STATE_SUSPENDED) )
return;
DPRINTK("blkfront.c:connect:%s.\n", info->xbdev->otherend);
info->xbdev->otherend);
return;
}
-
+
xlvbd_add(sectors, info->vdevice, binfo, sector_size, info);
(void)xenbus_switch_state(info->xbdev, NULL, XenbusStateConnected);
-
+
/* Kick pending requests. */
spin_lock_irq(&blkif_io_lock);
info->connected = BLKIF_STATE_CONNECTED;
kick_pending_request_queues(info);
spin_unlock_irq(&blkif_io_lock);
+
+ add_disk(info->gd);
}
/**
while ((req = elv_next_request(rq)) != NULL) {
info = req->rq_disk->private_data;
-
if (!blk_fs_request(req)) {
end_request(req, 0);
continue;
extern void do_blkif_request (request_queue_t *rq);
/* Virtual block-device subsystem. */
+/* Note that xlvbd_add doesn't call add_disk for you: you're expected
+ to call add_disk on info->gd once the disk is properly connected
+ up. */
int xlvbd_add(blkif_sector_t capacity, int device,
u16 vdisk_info, u16 sector_size, struct blkfront_info *info);
void xlvbd_del(struct blkfront_info *info);